"""
一、数据来源分析
    1、需求分析
        英雄名字 ——> 对应图片
    2、接口分析
        第一层URL
        https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js?ts=2816006
        获得英雄名字 对应的 id
        第二层
        https://game.gtimg.cn/images/lol/act/img/js/hero/{hero_id}.js?ts=2816008
        id 构造出 图片的 url
二、爬虫代码实现
    1、发送请求
    2、获取数据
    3、解析数据
    4、保存数据

"""
import requests


# 获取hero_list
def get_json(url, headers):

    try:
        resp = requests.get(url=url, headers=headers)
        return resp.json()
    except:
        return {}


# 从hero_list中解析出英雄的名字和英雄ID
def parse_data(data):
    data_list = []   # 定义一个空列表用来装英雄的数据
    # 遍历所有英雄
    for hero in data['hero']:
        # 将每个英雄的名字和ID都放在一个字典里
        dct = {
            'name': hero['name'],
            'hero_id': hero['heroId'],
        }
        # 再将字典塞到列表中
        data_list.append(dct)
    # 最后返回这个装有所有英雄数据的列表
    return data_list


# 构造每个英雄对应的详情数据的URL
def save_data(data_list):
    # 先定义空列表，后续将详情数据装在一个列表中
    url_list = []
    # 遍历所有英雄数据
    for data in data_list:
        # 自己手动构造英雄详情数据URL
        url = f"https://game.gtimg.cn/images/lol/act/img/js/hero/{data['hero_id']}.js?ts=2816008"
        url_list.append(url)  # 构造好的URL放在列表里面
    # 返回装有所有英雄详情URL的列表
    return url_list


# 主函数
def main():
    url = "https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js?ts=2816006"
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43',
    }

    data = get_json(url, headers)

    data_list = parse_data(data)

    save_data(data_list)


# run函数供其他模块调用，返回装有所有英雄详情URL的列表
def run(url, headers):

    # 下面三个函数都是为了获得装有所有英雄详情URL的列表
    data = get_json(url, headers)
    data_list = parse_data(data)
    url_list = save_data(data_list)

    return url_list


if __name__ == '__main__':
    main()
